package com.exm.collectcodenew.juc.random;

import java.util.Random;
//每个Random 实例里面都有一个原子性的种子变量用来记录当前的种子值，
//当要生成新的随机数时需要根据当前种子计算新的种子并更新回原子变量。
// 在多线程下使用单个Random 实例生成随机数时，当多个线程同时计算随机数来计算新的种子时， 多个线程会竞争同一个原子变量的更新操作，由于原子变量的更新是CAS 操作，同
//时只有一个线程会成功，所以会造成大量线程进行自旋重试， 这会降低并发性能，所以ThreadLocalRandom 应运而生。
//Random 的缺点是多个线程会使用同一个原子性种子变量， 从而导致对原子变量更新的竞争
public class RandomTest {
    public static void main(String[] args) {
        // ( 1 ）创建一个默认种子的随机数生成器
        Random random = new Random();
        // (2 ）输出10 个在0 ～ 5 （包含0 ，不包含5 ） 之间的随机数
        for (int i=0; i < 10;++i){
            System.out.println(random.nextInt(5));
        }
    }
}
